#ifndef LeanPoseModifier_h
#define LeanPoseModifier_h

#include "ILeanPoseModifier.h"
#include <CryExtension/Impl/ClassWeaver.h>


class CLeanPoseModifier
	: public ILeanPoseModifier
{
public:
	CRYINTERFACE_BEGIN()
		CRYINTERFACE_ADD( IAnimationPoseModifier )
		CRYINTERFACE_ADD( ILeanPoseModifier )
	CRYINTERFACE_END()

	CRYGENERATE_CLASS( CLeanPoseModifier, "AnimationPoseModifier_LeanPoseModifier", 0x871d994a919c49d4, 0x960bf9817d5d393c )

public:
	// ILeanPoseModifier
	virtual void Clear();
	virtual void SetJointLeanAngle( const uint32 index, const uint32 jointId, const float leanAngleRadians );
	// ~ILeanPoseModifier

	// IAnimationPoseModifier
	virtual bool Prepare( const SAnimationPoseModiferParams& params ) { return true; }
	virtual bool Execute( const SAnimationPoseModiferParams& params );
	virtual void Synchronize() {}

	virtual void GetMemoryUsage( ICrySizer* pSizer ) const
	{
		pSizer->AddObject( this, sizeof( *this ) );
	}
	// ~IAnimationPoseModifier

private:

	uint32 m_jointIds[ ILeanPoseModifier::LeanJointCount ];
	Quat m_additionalRotations[ ILeanPoseModifier::LeanJointCount ];

} _ALIGN( 32 );


#endif